Categorías destacadas
programacion php    
Artículo
7
¡votar!

 Sistema de Nombrado en Java (JNDI) [Parte I]


Threads y Sincronización

El JNDI define acceso síncrono a los sistemas de nombres y directorios. La igual que la mayoría de los APIS definidos para la plataforma Java, el acceso asíncrono se consigue usando varios threads.

Cuando usamos varios threads en nuestro programa, debemos recordar que el JNDI especifica que en los accesos concurrentes al mismo ejemplar Context no está garantizado que sean seguros ante los threads. Aunque algunos proveedores de servicios podrían garantizar la seguridad ante los threads para el mismo ejemplar de Context, es mejor usar sincronización para que el código sea portable a diferentes implementaciones de proveedores de servicios. Cuando usamos varios threads para acceder a diferentes ejemplares de Context, no necesitan estár sincronizados.

Aquí tenemos un ejemplo que crea dos threads, cada uno lista un ejemplar distinto de Context:

// Create the contexts
Context ctx1 = new InitialContext(env);
Context ctx2 = (Context)ctx1.lookup("ou=People");

// Create the threads
Thread thread1 = new ListThread(ctx1, "ONE");
Thread thread2 = new ListThread(ctx2, "TWO");

// Let them work
thread1.start();
thread2.start();

El método run() de cada threads e parece a esto.

public void run() {
    try {
	NamingEnumeration enum = ctx.list("");
	while (enum.hasMore()) {
	    System.out.println(label + ": " + enum.next());
	}
    } catch (NamingException e) {
	System.out.println(label + ": " + e);
    }
}

Cuando ejecutemos este programa, veremos la siguiente salida.

# java DiffCtx
ONE: ou=Groups: javax.naming.directory.DirContext
ONE: ou=People: javax.naming.directory.DirContext
ONE: ou=Staff: javax.naming.directory.DirContext
ONE: ou=NewHires: javax.naming.directory.DirContext
TWO: cn=Ted Geisel: javax.naming.directory.DirContext
ONE: cn=favDrink: javax.naming.directory.DirContext
TWO: cn=Jon Ruiz: javax.naming.directory.DirContext
TWO: cn=Scott Seligman: javax.naming.directory.DirContext
...

Observa qua a pesar del echo de que ambos ejemplares de Context están derivados del mismo ejemplar InitialContext, no necesitamos bloquear sus accesos. Sin embargo, si modificamos ligeramente el ejemplo para poder usar dos threads que listen el mismo Context, necesitamos bloquear el ejemplar de Context. En el siguiente programa modificado, el método run() del thread se parecería a esto.

public void run() {
    try {
	// Lock for multithreaded access
	synchronized (ctx) {
	    NamingEnumeration enum = ctx.list("");
	    while (enum.hasMore()) {
		System.out.println(label + ": " + enum.next());
	    }
	}
    } catch (NamingException e) {
	System.out.println(label + ": " + e);
    }
}

Cuando ejecutemos este ejmplo, generará la siguiente salida.

# java SameCtx
ONE: ou=Groups: javax.naming.directory.DirContext
ONE: ou=People: javax.naming.directory.DirContext
ONE: ou=Staff: javax.naming.directory.DirContext
ONE: ou=NewHires: javax.naming.directory.DirContext
ONE: cn=favDrink: javax.naming.directory.DirContext
TWO: ou=Groups: javax.naming.directory.DirContext
TWO: ou=People: javax.naming.directory.DirContext
TWO: ou=Staff: javax.naming.directory.DirContext
TWO: ou=NewHires: javax.naming.directory.DirContext
TWO: cn=favDrink: javax.naming.directory.DirContext
Publicado por:
Ricard Lou Torrijos
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon